package multiplex.view;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.Popup;
import javax.swing.SpringLayout;
import javax.swing.text.IconView;

import multiplex.facade.Facade;
import multiplex.model.Filme;
import multiplex.model.Promocao;
import multiplex.model.PromocaoFilme;

public class IFTelaAlteraPromocaoFilme extends InternalFramePrincipal {

	private final JLabel labelBuscarFilme = new JLabel("Buscar Filme");
	private JFormattedTextField TFbuscar;
	private JButton buttonBuscar;
	private JButton buttonFechar;
	private DefaultListModel listaModel;
	private JList listFilmes;
	private Facade fachada; 
	private Container conteudo;
	private JLabel nameFilmLabel;
	private JLabel namePromoLabel;
	private JLabel descPromoLabel;
	private JLabel diaLabel;
	private JLabel precoLabel;
	
	private JFormattedTextField filmeTextField,
								promoTextField,
								diaTextField,
								precoTextField;
	
	private JTextArea descTextArea;
	
	private JButton modifyButton;
	
	public IFTelaAlteraPromocaoFilme() {
		super("Altera Promocao de Filme");
		
		System.out.println("instanciou");
		// TODO Auto-generated constructor stub
		try{
		fachada = new Facade();
		
		conteudo = getContentPane();
		conteudo.setLayout(null);
	
		
		TFbuscar = new JFormattedTextField();
		TFbuscar.setPreferredSize(new Dimension(200, 30));
		TFbuscar.requestFocus();
		labelBuscarFilme.setLabelFor(TFbuscar);
		labelBuscarFilme.setBounds(5,10,100,50);
		TFbuscar.setBounds(110 , 20 , 200, 30);
		
		buttonBuscar = new JButton("Buscar");
		buttonBuscar.setBounds(320,25,90,20);
		int heigthContainer = getHeight();
				
		buttonFechar = new JButton("Fechar");
		buttonFechar.setBounds(320, heigthContainer - 100, 90, 20);

		this.listaModel = new DefaultListModel();
		listFilmes = new JList(this.listaModel);
		listFilmes.setBounds(5, 70, 400, 300);
			
		int baseX = 450;
		int baseY = 100;
		
		this.namePromoLabel = new JLabel("Promoção");
		this.descPromoLabel = new JLabel("Descrição");
		this.diaLabel = new JLabel("Dia");
		this.precoLabel = new JLabel("Preço");
		
		this.nameFilmLabel = new JLabel("Filme");
		nameFilmLabel.setBounds(baseX, baseY, 70, 20);
		
		filmeTextField = new JFormattedTextField();
		this.nameFilmLabel.setLabelFor(this.filmeTextField);
		filmeTextField.setBounds(baseX+100, baseY, 100, 20);
		filmeTextField.setEditable(false);
		
		promoTextField = new JFormattedTextField();
		this.namePromoLabel.setLabelFor(this.promoTextField);
		this.namePromoLabel.setBounds(baseX, baseY + 25, 70, 20);
		this.promoTextField.setBounds(baseX+100,baseY + 25,100,20);
		
		descTextArea = new JTextArea(5,20);
		descTextArea.setEditable(true);
		descTextArea.setLineWrap(true);
		this.descPromoLabel.setLabelFor(this.descTextArea);
		this.descPromoLabel.setBounds(baseX, baseY + 50, 70, 20);
		descTextArea.setBounds(baseX+100,baseY + 50,100,70);
		
		diaTextField = new JFormattedTextField();
		this.diaLabel.setLabelFor(this.diaTextField);
		this.diaLabel.setBounds(baseX, baseY + 125, 70, 20);
		this.diaTextField.setBounds(baseX+100, baseY + 125, 100, 20);
		
		precoTextField = new JFormattedTextField();
		this.precoLabel.setLabelFor(this.precoTextField);
		this.precoLabel.setBounds(baseX, baseY + 150, 70, 20);
		this.precoTextField.setBounds(baseX+100,baseY + 150,100,20);
		
		modifyButton = new JButton("Alterar");
		this.modifyButton.setBounds(baseX+110, baseY + 175,90,20);
		
		conteudo.add(labelBuscarFilme);
		conteudo.add(TFbuscar);
		conteudo.add(buttonBuscar);
		conteudo.add(listFilmes);
		conteudo.add(buttonFechar);
		conteudo.add(nameFilmLabel);
		conteudo.add(this.filmeTextField);
		conteudo.add(this.promoTextField);
		conteudo.add(namePromoLabel);
		conteudo.add(this.descPromoLabel);
		conteudo.add(this.descTextArea);
		conteudo.add(diaTextField);
		conteudo.add(diaLabel);
		conteudo.add(precoLabel);
		conteudo.add(precoTextField);
		conteudo.add(modifyButton);
		
	    buttonBuscar.addActionListener(new ActionListener(){
					@Override
					public void actionPerformed(ActionEvent arg0) {
						System.out.println(TFbuscar.getText());
						List<Filme> filme = fachada.getFilme(TFbuscar.getText());
						listaModel.removeAllElements();
						for(Filme f : filme){
							listaModel.addElement(f);
						}
						listFilmes.setModel( listaModel );
						if(filme.size()==0)JOptionPane.showMessageDialog(conteudo, "Nenhum filme encontrado com esse nome","Erro", EXIT_ON_CLOSE);
					}
			});
	    
	   buttonFechar.addActionListener(new ActionListener(){

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			IFTelaAlteraPromocaoFilme.this.setVisible(false);
		}
		   
	   });
	   
	   modifyButton.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			try{
				Filme oFilme = (Filme)listFilmes.getSelectedValue();
				List<PromocaoFilme> promocoesFilme = fachada.getPromocaoByFilme(oFilme);
				if(promocoesFilme.size()>0){
					PromocaoFilme promocaoFilme = promocoesFilme.get(0);
					double desconto = Double.valueOf(precoTextField.getText());
					Calendar dia = Calendar.getInstance();
					SimpleDateFormat sdf1 = new SimpleDateFormat("dd/mm/yyyy");
					dia.setTime(sdf1.parse(diaTextField.getText()));
					promocaoFilme.setDesconto(desconto);
					promocaoFilme.setDescricao(descTextArea.getText());
					promocaoFilme.setDia(dia);
					promocaoFilme.setFilme(oFilme);
					promocaoFilme.setNome(promoTextField.getText());
					fachada.alteraPromocaoFilme(promocaoFilme);
					JOptionPane.showMessageDialog(conteudo, "A alteração foi concluída com sucesso","Sucesso", EXIT_ON_CLOSE);
				}
				else{
					JOptionPane.showMessageDialog(conteudo,"Nenhuma promoção encontrada para o filme selecionado" ,"Erro", EXIT_ON_CLOSE);
				}
				
			}catch(Throwable er){
				JOptionPane.showMessageDialog(conteudo,"Houve um erro durante a alteração, revise os campos e tente novamente" ,"Erro", EXIT_ON_CLOSE);		
			}
			
		}
	});
	   
	   listFilmes.addMouseListener(new MouseListener(){

		@Override
		public void mouseClicked(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
	         if (arg0.getClickCount() >= 1){
		        Filme oFilme = (Filme)listFilmes.getSelectedValue();
				List<PromocaoFilme> aPromocao = fachada.getPromocaoByFilme(oFilme);
				if(aPromocao.size()>0){
					filmeTextField.setText(oFilme.getNome());
					promoTextField.setText(aPromocao.get(0).getNome());
					descTextArea.setText(aPromocao.get(0).getDescricao());
					diaTextField.setText(Integer.toString(aPromocao.get(0).getDia().get(Calendar.DAY_OF_MONTH))+"/"+Integer.toString(aPromocao.get(0).getDia().get(Calendar.MONTH)+1)+"/"+Integer.toString(aPromocao.get(0).getDia().get(Calendar.YEAR)));
					precoTextField.setText(Double.toString(aPromocao.get(0).getDesconto()));
				}
				else{
					JOptionPane.showMessageDialog(conteudo, "Nenhuma promoção encontrada para esse filme","Erro", EXIT_ON_CLOSE);
				}
	        }
		}
		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
	    	    	
	    
	    });
	        
		}
		catch(Exception e){
			JOptionPane.showMessageDialog(conteudo, e.toString());
	     }
	}
	
	
	public static void main(String args[]){
		
		JFrame aTela = new JFrame();
		aTela.setSize(new Dimension(800,600));
		
		IFTelaAlteraPromocaoFilme aTelaAltera = new IFTelaAlteraPromocaoFilme();
		
		aTela.add(aTelaAltera);
		aTela.setVisible(true);
		
		aTelaAltera.setVisible(true);
		
	}

}
